package org.japo.java.swing.igu;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import org.japo.java.swing.beans.PanelFondo;
import org.japo.java.swing.listeners.GEC;

public class IGU extends JFrame {

    //Componentes del IGU
    private JLabel lblPrueba;
    private JSlider sldTalla;
    private JSpinner spnTalla;

    //Recuros con la imagen de fondo del panel 
    private final String RECURSO = "/org/japo/java/resources/fondo.jpg";

    //Texto de prueba
    private final String TEXTO = "Rubén Vargas";

    //Configfuracion del Slider
    private final int TALLA_MINIMA = 0;
    private final int TALLA_MAXIMA = 100;
    private final int PASO_MENOR = 5;
    private final int PASO_MAYOR = 25;

    public IGU() {
        iniciarComponentes();
    }

    private void iniciarComponentes() {
        //Panel Principal
        JPanel pnlPrincipal = new JPanel();
        pnlPrincipal.setLayout(new GridLayout(2, 1));

        //Fuentes
        Font fontLbl = new Font("Calibri", Font.PLAIN, 40);
        Font fontCom = new Font("Calibri", Font.BOLD, 20);

        //Borde de etiqueta
        Border brdEtiqueta = new BevelBorder(BevelBorder.LOWERED);

        //Etiqueta de prueba
        lblPrueba = new JLabel();
        lblPrueba.setFont(fontLbl);
        lblPrueba.setText(TEXTO);
        lblPrueba.setHorizontalAlignment(JLabel.CENTER);
        lblPrueba.setOpaque(true);
        lblPrueba.setBackground(Color.white);
        lblPrueba.setBorder(brdEtiqueta);
        pnlPrincipal.add(lblPrueba);

        //Imagen de fondo
        URL urlImagen = getClass().getResource(RECURSO);
        Image i = new ImageIcon(urlImagen).getImage();

        //Panel de control
        JPanel pnlControl = new PanelFondo(i);
        FlowLayout f1 = new FlowLayout();
        f1.setHgap(50);
        f1.setVgap(20);
        pnlControl.setLayout(f1);
        pnlPrincipal.add(pnlControl);

        //gestor de eventos de cambio
        GEC gec = new GEC(this);

        //Deslizador selector de talla
        sldTalla = new JSlider();
        sldTalla.setMinimum(TALLA_MINIMA);
        sldTalla.setMaximum(TALLA_MAXIMA);
        sldTalla.setValue(40);
        sldTalla.setFont(fontCom);
        sldTalla.setPaintLabels(true);
        sldTalla.setPaintTicks(true);
        sldTalla.setMinorTickSpacing(PASO_MENOR);
        sldTalla.setMajorTickSpacing(PASO_MAYOR);
        sldTalla.addChangeListener(gec);
        sldTalla.setOpaque(false);
        pnlControl.add(sldTalla);

        //modelo de cambiador
        SpinnerNumberModel modeloSpinner = new SpinnerNumberModel();
        modeloSpinner.setMaximum(TALLA_MAXIMA);
        modeloSpinner.setMinimum(TALLA_MINIMA);
        modeloSpinner.setValue(40);

        //Cambiador de selector de talla
        spnTalla = new JSpinner();
        spnTalla.setModel(modeloSpinner);
        spnTalla.setFont(fontCom);
        spnTalla.addChangeListener(gec);
        pnlControl.add(spnTalla);

        //Ventana principal
        setTitle("Selección de Tamaño");
        setContentPane(pnlPrincipal);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setSize(400, 200);
        setLocationRelativeTo(null);
    }

    public void procesarTalla(Object o) {
        int talla;

        if (o.equals(sldTalla)) {
            talla = sldTalla.getValue();
            spnTalla.setValue(talla);
        } else {
            Object objValor = spnTalla.getValue();
            talla = (int) objValor;
            sldTalla.setValue(talla);
        }
        
        //Actualiza la fuente
        Font f = new Font("Calibri", Font.PLAIN, talla);
        
        //Aplica la fuente
        lblPrueba.setFont(f);
    }

}
